home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1993-08-16 | 4.5 KB | 142 lines |
- (******************************
- * Programm von Dieter Seidel *
- * Eingegeben am 14.11.1991 *
- ******************************)
-
- IMPLEMENTATION MODULE QuadBerechneQuad;
-
- FROM InOut IMPORT WriteCard, WriteLn, Write, WriteString;
- FROM QuadLese IMPORT MaxBefehle, MaxQuad, MaxZeile,
- arrZeile, QuadZeile, arrQuad, arrList;
- FROM QuadHoleBefehle IMPORT HoleZuweisung, HoleSchleife;
-
-
- PROCEDURE BerechneQuad( BefehlsListe : arrList;
- VAR QuadListe : arrQuad);
- VAR i,
- whileCounter : CARDINAL;
- whileZaehler : ARRAY [1..MaxBefehle] OF CARDINAL;
- beginZaehler : ARRAY [1..MaxBefehle] OF BOOLEAN;
-
-
- PROCEDURE BerechneQuadRek( BefehlsListe : arrList;
- VAR QuadListe : arrQuad;
- VAR Zeiger : CARDINAL;
- Zaehler : CARDINAL) : CARDINAL;
- VAR ZaehlerAlt : CARDINAL;
- BEGIN
- (**)
- IF Zaehler > 20 THEN RETURN Zaehler; END;
- (**)
- IF BefehlsListe[Zeiger] = "b" THEN
- INC(Zeiger);
- Zaehler:=BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
- END;
-
- IF BefehlsListe[Zeiger] = "X" THEN
- HoleZuweisung(QuadListe[Zaehler].Befehl,BefehlsListe,Zeiger);
- QuadListe[Zaehler].Zeile:=Zaehler;
- QuadListe[Zaehler].IFzeile:=Zaehler+1;
- QuadListe[Zaehler].ELSEzeile:=Zaehler+1;
- RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler+1);
- END;
-
- IF BefehlsListe[Zeiger] = "w" THEN
- INC(Zeiger);
- HoleSchleife(QuadListe[Zaehler].Befehl,BefehlsListe,Zeiger);
- QuadListe[Zaehler].Zeile:=Zaehler;
- QuadListe[Zaehler].IFzeile:=Zaehler+1;
- QuadListe[Zaehler].ELSEzeile:=Zaehler+2;
- ZaehlerAlt:=Zaehler;
- INC(Zaehler);
-
- IF BefehlsListe[Zeiger] = "X" THEN
- HoleZuweisung(QuadListe[Zaehler].Befehl,BefehlsListe,Zeiger);
- QuadListe[Zaehler].Zeile:=Zaehler;
- QuadListe[Zaehler].IFzeile:=ZaehlerAlt;
- QuadListe[Zaehler].ELSEzeile:=ZaehlerAlt;
- IF whileCounter # 0 THEN
- IF beginZaehler[whileCounter] THEN
-
- RETURN Zaehler+1;
- ELSE
- QuadListe[ZaehlerAlt].ELSEzeile:=whileZaehler[whileCounter];
- (* DEC(whileCounter);*)
- RETURN Zaehler+1;
- END;
- ELSE
- RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler+1);
- END;
- ELSE
- IF BefehlsListe[Zeiger] = "w" THEN
- INC(whileCounter);
- whileZaehler[whileCounter]:=ZaehlerAlt;
- beginZaehler[whileCounter]:=FALSE;
- Zaehler:=BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
-
- IF whileCounter # 0 THEN
- DEC(whileCounter);
- IF NOT(beginZaehler[whileCounter]) THEN
- RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler+1);
- ELSE
- QuadListe[ZaehlerAlt].ELSEzeile:=whileZaehler[whileCounter];
- RETURN Zaehler+1;
- END;
- ELSE
- QuadListe[ZaehlerAlt].ELSEzeile:=Zaehler;
- RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
- END;
- ELSE
- IF BefehlsListe[Zeiger] = "b" THEN
- INC(whileCounter);
- whileZaehler[whileCounter]:=ZaehlerAlt;
- beginZaehler[whileCounter]:=TRUE;
- INC(Zeiger);
- Zaehler:=BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
- QuadListe[ZaehlerAlt].ELSEzeile:=Zaehler;
- DEC(whileCounter);
- RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
- ELSE
- WriteLn;
- WriteString("Fehler in BerechneQuadRek!!!");
- WriteLn;
- HALT;
- END;
- END;
- RETURN Zaehler;
- END;
- END;
-
- IF BefehlsListe[Zeiger] = "e" THEN
- IF beginZaehler[whileCounter] THEN
- QuadListe[Zaehler-1].IFzeile:=whileZaehler[whileCounter];
- QuadListe[Zaehler-1].ELSEzeile:=whileZaehler[whileCounter];
- beginZaehler[whileCounter]:=FALSE;
- END;
- INC(Zeiger);
- IF BefehlsListe[Zeiger] = ";" THEN INC(Zeiger) END;
- RETURN Zaehler;
- END;
-
- WriteLn;
- WriteString("Fehler in BerechneQuadRek!!! ");WriteCard(Zaehler,5);
- WriteLn;
- (* HALT;*)
- RETURN Zaehler;
- END BerechneQuadRek;
-
-
- BEGIN (* BerechneQuad *)
- i:=1;
- whileCounter:=0;
- i:=BerechneQuadRek(BefehlsListe,QuadListe,i,1);
- QuadListe[i].Zeile:=0;
- QuadListe[i].IFzeile:=0;
- QuadListe[i].ELSEzeile:=0;
- QuadListe[i].Befehl:="";
- END BerechneQuad;
-
-
- END QuadBerechneQuad.
-
-